package com.fast.linkbeanadmin.pojo.response;

import cn.hutool.core.util.ObjUtil;
import com.fast.linkbeanadmin.enums.CodeEnum;

import java.util.HashMap;

/**
 * @author ruan cai yuan
 * @version 1.0
 * @fileName com.fast.linkbeanadmin.pojo.response.AjaxResult
 * @description: 通用返回对象
 * @since 2024/7/21 下午3:47
 */
public class ResultBean extends HashMap<String, Object> {

    private static final long serialVersionUID = 1L;

    /**
     * 状态码
     */
    public static final String CODE_FLAG = "code";

    /**
     * 返回内容
     */
    public static final String MSG_INFO = "msg";

    /**
     * 数据对象
     */
    public static final String DATA_OBJ = "data";

    /**
     * 初始化一个新创建的 AjaxResult 对象，使其表示一个空消息。
     */
    public ResultBean() {
    }

    /**
     * 初始化一个新创建的 AjaxResult 对象
     *
     * @param code 状态码
     * @param msg  返回内容
     */
    public ResultBean(int code, String msg) {
        super.put(CODE_FLAG, code);
        super.put(MSG_INFO, msg);
    }

    /**
     * 初始化一个新创建的 AjaxResult 对象
     *
     * @param code 状态码
     * @param msg  返回内容
     * @param data 数据对象
     */
    public ResultBean(int code, String msg, Object data) {
        super.put(CODE_FLAG, code);
        super.put(MSG_INFO, msg);
        if (ObjUtil.isNotNull(data)) {
            super.put(DATA_OBJ, data);
        }
    }

    /**
     * 返回成功消息
     *
     * @return 成功消息
     */
    public static ResultBean success() {
        return ResultBean.success("操作成功");
    }

    /**
     * 返回成功数据
     *
     * @return 成功消息
     */
    public static ResultBean success(Object data) {
        return ResultBean.success("操作成功", data);
    }

    /**
     * 返回成功消息
     *
     * @param msg 返回内容
     * @return 成功消息
     */
    public static ResultBean success(String msg) {
        return ResultBean.success(msg, null);
    }

    /**
     * 返回成功消息
     *
     * @param msg  返回内容
     * @param data 数据对象
     * @return 成功消息
     */
    public static ResultBean success(String msg, Object data) {
        return new ResultBean(CodeEnum.SUCCESS.getCode(), msg, data);
    }

    /**
     * 返回警告消息
     *
     * @param msg 返回内容
     * @return 警告消息
     */
    public static ResultBean warn(String msg) {
        return ResultBean.warn(msg, null);
    }

    /**
     * 返回警告消息
     *
     * @param msg  返回内容
     * @param data 数据对象
     * @return 警告消息
     */
    public static ResultBean warn(String msg, Object data) {
        return new ResultBean(CodeEnum.WARN.getCode(), msg, data);
    }

    /**
     * 返回错误消息
     *
     * @return 错误消息
     */
    public static ResultBean error() {
        return ResultBean.error("操作失败");
    }

    /**
     * 返回错误消息
     *
     * @param msg 返回内容
     * @return 错误消息
     */
    public static ResultBean error(String msg) {
        return ResultBean.error(msg, null);
    }

    /**
     * 返回错误消息
     *
     * @param msg  返回内容
     * @param data 数据对象
     * @return 错误消息
     */
    public static ResultBean error(String msg, Object data) {
        return new ResultBean(CodeEnum.ERROR.getCode(), msg, data);
    }

    /**
     * 返回错误消息
     *
     * @param code 状态码
     * @param msg  返回内容
     * @return 错误消息
     */
    public static ResultBean error(int code, String msg) {
        return new ResultBean(code, msg, null);
    }

    /**
     * 是否为成功消息
     *
     * @return 结果
     */
    public boolean isSuccess() {
        return ObjUtil.equals(CodeEnum.SUCCESS.getCode(), this.get(CODE_FLAG));
    }

    /**
     * 是否为警告消息
     *
     * @return 结果
     */
    public boolean isWarn() {
        return ObjUtil.equals(CodeEnum.WARN.getCode(), this.get(CODE_FLAG));
    }

    /**
     * 是否为错误消息
     *
     * @return 结果
     */
    public boolean isError() {
        return ObjUtil.equals(CodeEnum.ERROR.getCode(), this.get(CODE_FLAG));
    }

    /**
     * 方便链式调用
     *
     * @param key   键
     * @param value 值
     * @return 数据对象
     */
    @Override
    public ResultBean put(String key, Object value) {
        super.put(key, value);
        return this;
    }
}
